<template>
  <el-dialog :title="form.id ? '编辑' : '新增'" v-model="visible"
    :close-on-click-modal="false" draggable>
    <el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
      <el-row :gutter="24">
        <el-col :span="24" class="mb20">
          <el-form-item label="林权证号" prop="forestOwnershipCertificateNumber">
            <el-input v-model="form.forestOwnershipCertificateNumber" placeholder="请输入林权证号"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="不动产单元号" prop="realEstateUnitNumber">
            <el-input v-model="form.realEstateUnitNumber" placeholder="请输入不动产单元号"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="坐落县" prop="locatedInTheCounty">
            <el-input v-model="form.locatedInTheCounty" placeholder="请输入坐落县"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="坐落乡/镇/街道" prop="sittingInAVillagetownstreet">
            <el-input v-model="form.sittingInAVillagetownstreet" placeholder="请输入坐落乡/镇/街道"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="坐落村" prop="locatedInTheVillage">
            <el-input v-model="form.locatedInTheVillage" placeholder="请输入坐落村"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="坐落组" prop="locationGroup">
            <el-input v-model="form.locationGroup" placeholder="请输入坐落组"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地所有权权利人" prop="ldsyqqlr">
            <el-input v-model="form.ldsyqqlr" placeholder="请输入林地所有权权利人"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地所有权权利人统一社会信用代码" prop="ldsyqxtdm">
            <el-input v-model="form.ldsyqxtdm" placeholder="请输入林地所有权权利人统一社会信用代码"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地所有权经办机构" prop="ldsyqjbjg">
            <el-input v-model="form.ldsyqjbjg" placeholder="请输入林地所有权经办机构"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地所有权经办材料" prop="ldsyqjbcl">
            <el-input v-model="form.ldsyqjbcl" placeholder="请输入林地所有权经办材料"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地所有权经办系统" prop="ldsyqjbxt">
            <el-input v-model="form.ldsyqjbxt" placeholder="请输入林地所有权经办系统"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地所有权经办系统地址" prop="ldsyqjbxtdz">
            <el-input v-model="form.ldsyqjbxtdz" placeholder="请输入林地所有权经办系统地址"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地使用权（自留山）权利人" prop="ldsiyqr">
            <el-input v-model="form.ldsiyqr" placeholder="请输入林地使用权（自留山）权利人"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地使用权权力人（自留山）身份证号码" prop="ldsiyqsfzh">
            <el-input v-model="form.ldsiyqsfzh" placeholder="请输入林地使用权权力人（自留山）身份证号码"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地使用权（自留山）起日期" prop="ldsiyqqr">
            <el-input v-model="form.ldsiyqqr" placeholder="请输入林地使用权（自留山）起日期"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地使用权（自留山）止日期" prop="ldsiyqzr">
            <el-input v-model="form.ldsiyqzr" placeholder="请输入林地使用权（自留山）止日期"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地使用权经办机构" prop="ldsiyqjbjg">
            <el-input v-model="form.ldsiyqjbjg" placeholder="请输入林地使用权经办机构"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地使用权经办材料" prop="ldsiyqjbcl">
            <el-input v-model="form.ldsiyqjbcl" placeholder="请输入林地使用权经办材料"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地使用权经办系统" prop="ldsiyqjbxt">
            <el-input v-model="form.ldsiyqjbxt" placeholder="请输入林地使用权经办系统"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地使用权经办查询地址" prop="ldsiyqjbcxdz">
            <el-input v-model="form.ldsiyqjbcxdz" placeholder="请输入林地使用权经办查询地址"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地承包经营权权利人" prop="ldcbjyqr">
            <el-input v-model="form.ldcbjyqr" placeholder="请输入林地承包经营权权利人"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地承包经营权权利人身份证号码" prop="ldcbjyqsfhz">
            <el-input v-model="form.ldcbjyqsfhz" placeholder="请输入林地承包经营权权利人身份证号码"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地承包经营权权利人统一社会信用代码" prop="ldcbjyqxydm">
            <el-input v-model="form.ldcbjyqxydm" placeholder="请输入林地承包经营权权利人统一社会信用代码"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地承包经营权起始日期" prop="ldcbjyqqr">
            <el-input v-model="form.ldcbjyqqr" placeholder="请输入林地承包经营权起始日期"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地承包经营权终止日期" prop="ldcbjyqzr">
            <el-input v-model="form.ldcbjyqzr" placeholder="请输入林地承包经营权终止日期"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地承包权经办机构" prop="ldcbqjbjg">
            <el-input v-model="form.ldcbqjbjg" placeholder="请输入林地承包权经办机构"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地承包权经办材料" prop="ldcbqjbcl">
            <el-input v-model="form.ldcbqjbcl" placeholder="请输入林地承包权经办材料"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地承包权经办系统" prop="ldcbqjbxt">
            <el-input v-model="form.ldcbqjbxt" placeholder="请输入林地承包权经办系统"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林地承包权经办查询地址" prop="ldcbqjbcxdz">
            <el-input v-model="form.ldcbqjbcxdz" placeholder="请输入林地承包权经办查询地址"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木所有权权利人" prop="lmsyqr">
            <el-input v-model="form.lmsyqr" placeholder="请输入林木所有权权利人"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木所有权权利人身份证号码" prop="lmsyqsfzh">
            <el-input v-model="form.lmsyqsfzh" placeholder="请输入林木所有权权利人身份证号码"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木所有权权利人统一社会信用代码" prop="lmsyqxtdm">
            <el-input v-model="form.lmsyqxtdm" placeholder="请输入林木所有权权利人统一社会信用代码"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木所有权经办机构" prop="lmsyqjbjg">
            <el-input v-model="form.lmsyqjbjg" placeholder="请输入林木所有权经办机构"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木所有权经办材料" prop="lmsyqjbcl">
            <el-input v-model="form.lmsyqjbcl" placeholder="请输入林木所有权经办材料"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木所有权经办系统" prop="lmsyqjbxt">
            <el-input v-model="form.lmsyqjbxt" placeholder="请输入林木所有权经办系统"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木所有权经办查询地址" prop="lmsyqjbcxdz">
            <el-input v-model="form.lmsyqjbcxdz" placeholder="请输入林木所有权经办查询地址"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木使用权权利人" prop="lmsiyqr">
            <el-input v-model="form.lmsiyqr" placeholder="请输入林木使用权权利人"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木使用权权利人身份证号码" prop="lmsiyqsfzh">
            <el-input v-model="form.lmsiyqsfzh" placeholder="请输入林木使用权权利人身份证号码"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木使用权权利人统一社会信用代码" prop="lmsiyqxydm">
            <el-input v-model="form.lmsiyqxydm" placeholder="请输入林木使用权权利人统一社会信用代码"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木使用权经办机构" prop="lmsiyqjbjg">
            <el-input v-model="form.lmsiyqjbjg" placeholder="请输入林木使用权经办机构"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木使用权经办材料" prop="lmsiyqjbcl">
            <el-input v-model="form.lmsiyqjbcl" placeholder="请输入林木使用权经办材料"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木使用权经办系统" prop="lmsiyqjbxt">
            <el-input v-model="form.lmsiyqjbxt" placeholder="请输入林木使用权经办系统"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="林木使用权查询地址" prop="lmsiyqcxdz">
            <el-input v-model="form.lmsiyqcxdz" placeholder="请输入林木使用权查询地址"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="审核人" prop="reviewer">
            <el-input v-model="form.reviewer" placeholder="请输入审核人"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="审核人编号" prop="auditorNumberAuditProcess">
            <el-input v-model="form.auditorNumberAuditProcess" placeholder="请输入审核人编号"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="依据文件编号" prop="accordingToTheDocumentNumber">
            <el-input v-model="form.accordingToTheDocumentNumber" placeholder="请输入依据文件编号"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="依据文件名称" prop="accordingToTheFileName">
            <el-input v-model="form.accordingToTheFileName" placeholder="请输入依据文件名称"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="状态" prop="state">
            <el-input v-model="form.state" placeholder="请输入状态"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="照片" prop="photo">
            <el-input v-model="form.photo" placeholder="请输入照片"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="保险产品" prop="insuranceProducts">
            <el-input v-model="form.insuranceProducts" placeholder="请输入保险产品"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="最新评估报告" prop="latestEvaluationReport">
            <el-input v-model="form.latestEvaluationReport" placeholder="请输入最新评估报告"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="评估金额" prop="evaluateTheAmount">
            <el-input v-model="form.evaluateTheAmount" placeholder="请输入评估金额"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="抵押阈值金额" prop="mortgageThresholdAmount">
            <el-input v-model="form.mortgageThresholdAmount" placeholder="请输入抵押阈值金额"/>
          </el-form-item>
        </el-col>
        <el-col :span="24" class="mb20">
          <el-form-item label="发证记录编号" prop="certificateIssuanceRecordNumber">
            <el-input v-model="form.certificateIssuanceRecordNumber" placeholder="请输入发证记录编号"/>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="visible = false">取 消</el-button>
        <el-button type="primary" @click="onSubmit" :disabled="loading">确 认</el-button>
      </span>
    </template>
  </el-dialog>
</template>

<script setup lang="ts" name="MailingRecordOfLinQuanCertificationDialog">
// ========== 1. 导入语句 ==========
import { useDict } from '/@/hooks/dict';
import { rule } from '/@/utils/validate';
import { useMessage } from "/@/hooks/message";
import { getObj, addObj, putObj, validateExist } from '/@/api/forestry/mailingRecordOfLinQuanCertification';

// ========== 2. 组件定义 ==========
// 定义组件事件
const emit = defineEmits(['refresh']);

// ========== 3. 响应式数据定义 ==========
// 基础响应式变量
const dataFormRef = ref(); // 表单引用
const visible = ref(false); // 弹窗显示状态
const loading = ref(false); // 加载状态

// 表单数据对象
const form = reactive({
  id: '', // 主键
  forestOwnershipCertificateNumber: '', // 林权证号
  realEstateUnitNumber: '', // 不动产单元号
  locatedInTheCounty: '', // 坐落县
  sittingInAVillagetownstreet: '', // 坐落乡/镇/街道
  locatedInTheVillage: '', // 坐落村
  locationGroup: '', // 坐落组
  ldsyqqlr: '', // 林地所有权权利人
  ldsyqxtdm: '', // 林地所有权权利人统一社会信用代码
  ldsyqjbjg: '', // 林地所有权经办机构
  ldsyqjbcl: '', // 林地所有权经办材料
  ldsyqjbxt: '', // 林地所有权经办系统
  ldsyqjbxtdz: '', // 林地所有权经办系统地址
  ldsiyqr: '', // 林地使用权（自留山）权利人
  ldsiyqsfzh: '', // 林地使用权权力人（自留山）身份证号码
  ldsiyqqr: '', // 林地使用权（自留山）起日期
  ldsiyqzr: '', // 林地使用权（自留山）止日期
  ldsiyqjbjg: '', // 林地使用权经办机构
  ldsiyqjbcl: '', // 林地使用权经办材料
  ldsiyqjbxt: '', // 林地使用权经办系统
  ldsiyqjbcxdz: '', // 林地使用权经办查询地址
  ldcbjyqr: '', // 林地承包经营权权利人
  ldcbjyqsfhz: '', // 林地承包经营权权利人身份证号码
  ldcbjyqxydm: '', // 林地承包经营权权利人统一社会信用代码
  ldcbjyqqr: '', // 林地承包经营权起始日期
  ldcbjyqzr: '', // 林地承包经营权终止日期
  ldcbqjbjg: '', // 林地承包权经办机构
  ldcbqjbcl: '', // 林地承包权经办材料
  ldcbqjbxt: '', // 林地承包权经办系统
  ldcbqjbcxdz: '', // 林地承包权经办查询地址
  lmsyqr: '', // 林木所有权权利人
  lmsyqsfzh: '', // 林木所有权权利人身份证号码
  lmsyqxtdm: '', // 林木所有权权利人统一社会信用代码
  lmsyqjbjg: '', // 林木所有权经办机构
  lmsyqjbcl: '', // 林木所有权经办材料
  lmsyqjbxt: '', // 林木所有权经办系统
  lmsyqjbcxdz: '', // 林木所有权经办查询地址
  lmsiyqr: '', // 林木使用权权利人
  lmsiyqsfzh: '', // 林木使用权权利人身份证号码
  lmsiyqxydm: '', // 林木使用权权利人统一社会信用代码
  lmsiyqjbjg: '', // 林木使用权经办机构
  lmsiyqjbcl: '', // 林木使用权经办材料
  lmsiyqjbxt: '', // 林木使用权经办系统
  lmsiyqcxdz: '', // 林木使用权查询地址
  reviewer: '', // 审核人
  auditorNumberAuditProcess: '', // 审核人编号
  accordingToTheDocumentNumber: '', // 依据文件编号
  accordingToTheFileName: '', // 依据文件名称
  state: '', // 状态
  photo: '', // 照片
  insuranceProducts: '', // 保险产品
  latestEvaluationReport: '', // 最新评估报告
  evaluateTheAmount: '', // 评估金额
  mortgageThresholdAmount: '', // 抵押阈值金额
  certificateIssuanceRecordNumber: '', // 发证记录编号
});

// ========== 4. 字典数据处理 ==========

// ========== 5. 表单校验规则 ==========
const dataRules = ref({
  forestOwnershipCertificateNumber: [
    { required: true, message: '林权证号不能为空', trigger: 'blur' }
  ],
});

// ========== 6. 方法定义 ==========
// 获取详情数据
const getMailingRecordOfLinQuanCertificationData = async (id: string) => {
  try {
    loading.value = true;
    const { data } = await getObj({ id: id });
    // 直接将第一条数据赋值给表单
    Object.assign(form, data[0]);
  } catch (error) {
    useMessage().error('获取数据失败');
  } finally {
    loading.value = false;
  }
};

// 打开弹窗方法
const openDialog = (id: string) => {
  visible.value = true;
  form.id = '';

  // 重置表单数据
  nextTick(() => {
    dataFormRef.value?.resetFields();
  });

  // 获取MailingRecordOfLinQuanCertification信息
  if (id) {
    form.id = id;
    getMailingRecordOfLinQuanCertificationData(id);
  }
};

// 提交表单方法
const onSubmit = async () => {
  loading.value = true; // 防止重复提交
  
  // 表单校验
  const valid = await dataFormRef.value.validate().catch(() => {});
  if (!valid) {
    loading.value = false;
    return false;
  }

  try {
    // 根据是否有ID判断是新增还是修改
    form.id ? await putObj(form) : await addObj(form);
    useMessage().success(form.id ? '修改成功' : '添加成功');
    visible.value = false;
    emit('refresh'); // 通知父组件刷新列表
  } catch (err: any) {
    useMessage().error(err.msg);
  } finally {
    loading.value = false;
  }
};

// ========== 7. 对外暴露 ==========
// 暴露方法给父组件
defineExpose({
  openDialog
});
</script> 